#include "StdThread.h"
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>


struct StdThread
{
    pthread_t threadID;
};

Thread *InitThread(void *(*func)(void *), void *arg)
{
    Thread *t = (Thread *)malloc(sizeof(Thread));
    if (t == NULL)
    {
        printf("initThread malloc error!\n");
    }
    if (pthread_create(&t->threadID, NULL, func, arg) != 0)//如果pthread_create函数返回非零值，表示创建线程失败。
    {//是 POSIX 线程库中的一个函数，用于创建新的线程。
        perror("initthread pthread :");
        free(t);
        return NULL;
    }
    return t;
}

void ClearThread(Thread *t)
{
    free(t);
}

void *JoinThread(Thread *t)
{
    void *value = NULL;
    pthread_join(t->threadID, &value);//该函数用于等待指定线程（通过线程标识符t->threadID指定）的结束，
    //并将线程的返回值保存在&value指向的内存地址中。
    return value;
}///等待指定的线程结束。

void DetachThread(Thread *t)
{
    if (pthread_detach(t->threadID) != 0)                              
    {//pthread_detach 函数可以将线程标记为可分离状态，使其在线程终止时自动释放资源
        perror("DetachThread detach:");
        return;
    }
}

void CancelThread(Thread *t)
{
    if (pthread_cancel(t->threadID) != 0)
    {
        perror("CancelThread:");
        return;
    }//pthread_cancel 是 POSIX 线程库中的一个函数，用于取消指定的线程的执行。
}//当调用 pthread_cancel 函数时，目标线程会收到一个取消请求，但并不一定会立即终止。
